import ctypes
import tkinter as tk
from tkinter import font


class WindowsDialog:
    """Windows 系统对话框工具类，封装消息框和输入对话框功能"""

    @staticmethod
    def show_message_box(
        parent_hwnd: int = 0,
        title: str = 'default_title',
        text: str = 'default_text',
        msg_type: int = 0
    ) -> int:
        """显示系统消息框（调用 Windows API）
        
        Args:
            parent_hwnd (int): 父窗口句柄，默认0（无父窗口）
            title (str): 消息框标题
            text (str): 消息框内容
            msg_type (int): 消息框样式类型（决定按钮和图标）
        
        Returns:
            int: 用户点击按钮的返回值（如：1=确定，2=取消等）
        """
        return ctypes.windll.user32.MessageBoxW(parent_hwnd, text, title, msg_type)

    @staticmethod
    def show_input_dialog(
        title: str = "输入窗口",
        label_text: str = "请输入内容",
        button_text: str = "确认",
        font_size: int = 20,
        font_family: str = "Arial"
    ) -> str:
        """显示自定义输入对话框（基于Tkinter）
        
        Args:
            title (str): 窗口标题
            label_text (str): 输入提示文字
            button_text (str): 确认按钮文字
            font_size (int): 字体大小
            font_family (str): 字体类型
        
        Returns:
            str: 用户输入内容（取消则返回None）
        """
        result = None

        def on_confirm():
            nonlocal result
            result = entry.get()
            root.destroy()

        # 创建主窗口
        root = tk.Tk()
        root.title(title)
        root.resizable(False, False)  # 禁止窗口大小调整

        # 设置字体
        custom_font = font.Font(family=font_family, size=font_size)

        # 创建标签
        label = tk.Label(root, text=label_text, font=custom_font)
        label.pack(pady=10, padx=20, anchor="w")

        # 创建输入框
        entry = tk.Entry(root, font=custom_font, width=30)
        entry.pack(padx=20, pady=5, fill="x")
        entry.focus_set()  # 自动获取焦点

        # 绑定回车键确认
        entry.bind("<Return>", lambda event: on_confirm())

        # 创建确认按钮
        button = tk.Button(
            root,
            text=button_text,
            command=on_confirm,
            font=custom_font,
            width=10
        )
        button.pack(pady=20)

        # 窗口居中显示
        root.update_idletasks()
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        window_width = root.winfo_reqwidth()
        window_height = root.winfo_reqheight()
        x = (screen_width - window_width) // 2
        y = (screen_height - window_height) // 2
        root.geometry(f"{window_width}x{window_height}+{x}+{y}")

        root.mainloop()
        return result

